package Mapper;


import entity.CDate;
import entity.Date;
import org.apache.ibatis.annotations.*;

import java.time.LocalDate;
import java.util.Optional;

@Mapper
public interface DateRecordMapper {

    //功能:在日历功能中，获得选定日期的情绪
    //接口接收user_id(用户id),date(选定日期)
    @Select("select emotions from calendar_record where user_id = #{user_id} and date = #{date}")
    public String getDateRecord(int user_id, LocalDate date);

    //功能:在日历功能中，查找选定日期的数据库记录
    //接口接收userId(用户id),date(选定日期),返回一个CDate类
    @Select("SELECT * FROM calendar_record WHERE user_id = #{userId} AND date = #{date}")
    Optional<CDate> findByUserIdAndDate(@Param("userId") Long userId, @Param("date") LocalDate date);

    //功能:在日历功能中，如果选定日期已经记录过情绪，会执行该语句，进行更新操作
    //接口接收userId(用户id),date(选定日期),emotion(新选择的情绪)
    @Update("UPDATE calendar_record SET emotions = #{emotion} WHERE user_id = #{userId} AND date = #{date}")
    int updateEmotionRecord(@Param("userId") Long userId, @Param("date") LocalDate date, @Param("emotion") String emotion);

    //功能:在日历功能中，如果选定日期之前没有被设置情绪，会执行该语句，进行插入操作
    //接口接收recordId(记录id,该变量将由下一语句‘getMaxRecordId’获得)，userId(用户id),date(选定日期)，emotion(选定的情绪)
    @Insert("INSERT INTO calendar_record (record_id, user_id, date, emotions) VALUES (#{recordId}, #{userId}, #{date}, #{emotion})")
    int insertEmotionRecord(@Param("recordId") Long recordId, @Param("userId") Long userId, @Param("date") LocalDate date, @Param("emotion") String emotion);

    //功能:获得当前数据库calendar_record表中最大record_id的值
    @Select("SELECT MAX(record_id) FROM calendar_record")
    Long getMaxRecordId();
}
